home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / misc / URLClassPath.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.8 KB  |  242 lines

  1. package sun.misc;
  2.  
  3. import java.io.File;
  4. import java.io.FilePermission;
  5. import java.io.IOException;
  6. import java.net.JarURLConnection;
  7. import java.net.SocketPermission;
  8. import java.net.URL;
  9. import java.net.URLConnection;
  10. import java.net.URLStreamHandler;
  11. import java.net.URLStreamHandlerFactory;
  12. import java.security.AccessController;
  13. import java.security.Permission;
  14. import java.security.PrivilegedActionException;
  15. import java.util.ArrayList;
  16. import java.util.Enumeration;
  17. import java.util.HashMap;
  18. import java.util.Stack;
  19. import java.util.StringTokenizer;
  20. import sun.net.www.ParseUtil;
  21. import sun.security.action.GetPropertyAction;
  22.  
  23. public class URLClassPath {
  24.    static final String USER_AGENT_JAVA_VERSION = "UA-Java-Version";
  25.    static final String JAVA_VERSION = (String)AccessController.doPrivileged(new GetPropertyAction("java.version"));
  26.    private static final boolean DEBUG = AccessController.doPrivileged(new GetPropertyAction("sun.misc.URLClassPath.debug")) != null;
  27.    private ArrayList path;
  28.    Stack urls;
  29.    ArrayList loaders;
  30.    HashMap lmap;
  31.    private URLStreamHandler jarHandler;
  32.  
  33.    public URLClassPath(URL[] var1, URLStreamHandlerFactory var2) {
  34.       this.path = new ArrayList();
  35.       this.urls = new Stack();
  36.       this.loaders = new ArrayList();
  37.       this.lmap = new HashMap();
  38.  
  39.       for(int var3 = 0; var3 < var1.length; ++var3) {
  40.          this.path.add(var1[var3]);
  41.       }
  42.  
  43.       this.push(var1);
  44.       if (var2 != null) {
  45.          this.jarHandler = var2.createURLStreamHandler("jar");
  46.       }
  47.  
  48.    }
  49.  
  50.    public URLClassPath(URL[] var1) {
  51.       this(var1, (URLStreamHandlerFactory)null);
  52.    }
  53.  
  54.    public void addURL(URL var1) {
  55.       synchronized(this.urls) {
  56.          if (!this.path.contains(var1)) {
  57.             this.urls.add(0, var1);
  58.             this.path.add(var1);
  59.          }
  60.       }
  61.    }
  62.  
  63.    public URL[] getURLs() {
  64.       synchronized(this.urls) {
  65.          return (URL[])this.path.toArray(new URL[this.path.size()]);
  66.       }
  67.    }
  68.  
  69.    public URL findResource(String var1, boolean var2) {
  70.       Loader var3;
  71.       for(int var4 = 0; (var3 = this.getLoader(var4)) != null; ++var4) {
  72.          URL var5 = var3.findResource(var1, var2);
  73.          if (var5 != null) {
  74.             return var5;
  75.          }
  76.       }
  77.  
  78.       return null;
  79.    }
  80.  
  81.    public Resource getResource(String var1, boolean var2) {
  82.       if (DEBUG) {
  83.          System.err.println("URLClassPath.getResource(\"" + var1 + "\")");
  84.       }
  85.  
  86.       Loader var3;
  87.       for(int var4 = 0; (var3 = this.getLoader(var4)) != null; ++var4) {
  88.          Resource var5 = var3.getResource(var1, var2);
  89.          if (var5 != null) {
  90.             return var5;
  91.          }
  92.       }
  93.  
  94.       return null;
  95.    }
  96.  
  97.    public Enumeration findResources(String var1, boolean var2) {
  98.       return new 1(this, var1, var2);
  99.    }
  100.  
  101.    public Resource getResource(String var1) {
  102.       return this.getResource(var1, true);
  103.    }
  104.  
  105.    public Enumeration getResources(String var1, boolean var2) {
  106.       return new 2(this, var1, var2);
  107.    }
  108.  
  109.    public Enumeration getResources(String var1) {
  110.       return this.getResources(var1, true);
  111.    }
  112.  
  113.    private synchronized Loader getLoader(int var1) {
  114.       while(this.loaders.size() < var1 + 1) {
  115.          URL var2;
  116.          synchronized(this.urls) {
  117.             if (this.urls.empty()) {
  118.                return null;
  119.             }
  120.  
  121.             var2 = (URL)this.urls.pop();
  122.          }
  123.  
  124.          if (!this.lmap.containsKey(var2)) {
  125.             Loader var3;
  126.             try {
  127.                var3 = this.getLoader(var2);
  128.                URL[] var4 = var3.getClassPath();
  129.                if (var4 != null) {
  130.                   this.push(var4);
  131.                }
  132.             } catch (IOException var5) {
  133.                continue;
  134.             }
  135.  
  136.             this.loaders.add(var3);
  137.             this.lmap.put(var2, var3);
  138.          }
  139.       }
  140.  
  141.       return (Loader)this.loaders.get(var1);
  142.    }
  143.  
  144.    private Loader getLoader(URL var1) throws IOException {
  145.       try {
  146.          return (Loader)AccessController.doPrivileged(new 3(this, var1));
  147.       } catch (PrivilegedActionException var3) {
  148.          throw (IOException)var3.getException();
  149.       }
  150.    }
  151.  
  152.    private void push(URL[] var1) {
  153.       synchronized(this.urls) {
  154.          for(int var3 = var1.length - 1; var3 >= 0; --var3) {
  155.             this.urls.push(var1[var3]);
  156.          }
  157.  
  158.       }
  159.    }
  160.  
  161.    public static URL[] pathToURLs(String var0) {
  162.       StringTokenizer var1 = new StringTokenizer(var0, File.pathSeparator);
  163.       URL[] var2 = new URL[var1.countTokens()];
  164.       int var3 = 0;
  165.  
  166.       while(var1.hasMoreTokens()) {
  167.          File var4 = new File(var1.nextToken());
  168.  
  169.          try {
  170.             var4 = new File(var4.getCanonicalPath());
  171.          } catch (IOException var7) {
  172.          }
  173.  
  174.          try {
  175.             var2[var3++] = ParseUtil.fileToEncodedURL(var4);
  176.          } catch (IOException var6) {
  177.          }
  178.       }
  179.  
  180.       if (var2.length != var3) {
  181.          URL[] var8 = new URL[var3];
  182.          System.arraycopy(var2, 0, var8, 0, var3);
  183.          var2 = var8;
  184.       }
  185.  
  186.       return var2;
  187.    }
  188.  
  189.    public URL checkURL(URL var1) {
  190.       try {
  191.          check(var1);
  192.          return var1;
  193.       } catch (Exception var3) {
  194.          return null;
  195.       }
  196.    }
  197.  
  198.    static void check(URL var0) throws IOException {
  199.       SecurityManager var1 = System.getSecurityManager();
  200.       if (var1 != null) {
  201.          URLConnection var2 = var0.openConnection();
  202.          Permission var3 = var2.getPermission();
  203.          if (var3 != null) {
  204.             try {
  205.                var1.checkPermission(var3);
  206.             } catch (SecurityException var6) {
  207.                if (var3 instanceof FilePermission && var3.getActions().indexOf("read") != -1) {
  208.                   var1.checkRead(var3.getName());
  209.                } else {
  210.                   if (!(var3 instanceof SocketPermission) || var3.getActions().indexOf("connect") == -1) {
  211.                      throw var6;
  212.                   }
  213.  
  214.                   URL var5 = var0;
  215.                   if (var2 instanceof JarURLConnection) {
  216.                      var5 = ((JarURLConnection)var2).getJarFileURL();
  217.                   }
  218.  
  219.                   var1.checkConnect(var5.getHost(), var5.getPort());
  220.                }
  221.             }
  222.          }
  223.       }
  224.  
  225.    }
  226.  
  227.    // $FF: synthetic method
  228.    static Loader access$000(URLClassPath var0, int var1) {
  229.       return var0.getLoader(var1);
  230.    }
  231.  
  232.    // $FF: synthetic method
  233.    static URLStreamHandler access$100(URLClassPath var0) {
  234.       return var0.jarHandler;
  235.    }
  236.  
  237.    // $FF: synthetic method
  238.    static boolean access$300() {
  239.       return DEBUG;
  240.    }
  241. }
  242.